#ifndef BIN_TREE_H
#define BIN_TREE_H

typedef char NodeDateType;

typedef struct TNode
{
	NodeDateType data;
	struct TNode *lchild, *rchild; // 左右孩子指针
} BTNode, *BinTree;				   // 表示二叉树节点或者是一棵二叉树的指针

/**
 * 构造一棵二叉树，从键盘输入二叉树的前序遍历以进行构造，用#表示这个节点为空
 * @param tree 传入二叉树的指针引用以初始化
 */
void createTree(BinTree &);

/**
 * 先序遍历二叉树
 * @param tree 传入二叉树指针引用
 * @param visit(NodeDataType&) 回调函数
 */
void preOrderTraverse(BinTree &, void(NodeDateType &));

/**
 * 中序遍历二叉树
 * @param tree 传入二叉树指针引用
 * @param visit(NodeDataType&) 回调函数
 */
void inOrderTraverse(BinTree &, void(NodeDateType &));

/**
 * 后序遍历二叉树
 * @param tree 传入二叉树指针引用
 * @param visit(NodeDataType&) 回调函数
 */
void postOrderTraverse(BinTree &, void(NodeDateType &));

#include "bin-tree.cpp"

#endif